I. Field
The present invention relates to data communication. More particularly, the present invention relates to techniques to Turbo decode a code segment with unknown scale information in a manner to provide improved performance.
II. Background
Wireless communication systems are widely deployed to provide various types of communication such as voice, packet data, and so on. These systems may be based on code division multiple access (CDMA), time division multiple access (TDMA), or some other multiple access techniques. A CDMA system provides certain advantages over other types of system, including increased system capacity.
A CDMA system may be designed to support one or more CDMA standards such as IS-95, W-CDMA, cdma2000, and others. Each standard typically defines the processing of data prior to transmission on the forward and reverse links. For example, voice and/or packet data may be coded at a particular data rate, formatted into a defined frame format, and processed (e.g., encoded for error correction and/or detection, interleaved, and so on) in accordance with a particular processing scheme.
Many newer CDMA standards employ a parallel concatenated convolutional encoder (often referred to as a Turbo encoder), which may be selected for encoding a code segment (e.g., a data packet) prior to transmission. The Turbo encoder employs two constituent encoders operated in parallel and in combination with a code interleaver. The code interleaver shuffles (i.e., interleaves) the information bits in the code segment in accordance with a defined interleaving scheme. One constituent encoder encodes the information bits in the code segment to generate a first sequence of parity bits, and the other constituent encoder encodes the shuffled information bits to generate a second sequence of parity bits. The information bits and some or all of the parity bits in the first and second sequences are transmitted.
A complementary (and computationally intensive) Turbo decoding is performed at a receiver unit. For each Turbo encoded segment, the received (soft value) bits are typically scaled, quantized, and stored to a buffer. The information and parity bits for the first constituent encoder are then retrieved from the buffer and decoded by a first constituent decoder based on the first constituent code to provide “extrinsic” information indicative of adjustments in the confidence in the detected values for the information bits. Intermediate results that include the extrinsic information from the first constituent decoder are then stored to a storage unit in an interleaved order matching the code interleaving used at the transmitter unit.
The intermediate results and the parity bits from the second constituent encoder are then retrieved from their respective sources and decoded by a second constituent decoder based on the second constituent code to provide extrinsic information indicative of further adjustments in the confidence in the detected values for the information bits. Intermediate results that comprise the extrinsic information from the second constituent decoder are then stored to the storage unit in a de-interleaved order complementary to the code interleaving used at the transmitter unit. The intermediate results are used by the next iteration of the first constituent decoder. The decoding by the first and second constituent decoders is iterated a number of times to yield the final decoded result.
Each constituent decoder may be implemented as a maximum a posteriori (MAP) decoder that attempts to minimize the bit error of a code segment. For each information bit to be decoded by the MAP decoder, a number of computations are performed to derive the extrinsic information. For certain decoder implementations, the accuracy of the computations depends on knowledge of the “scale” of the input bits (i.e., the samples) provided to the MAP decoder. The scale information may include the variance and amplitude of the samples provided to the MAP decoder. If the decoding is performed with no knowledge or a wrong assumption of the scale of the input bits, then the decoding performance can degrade.
There is therefore a need for a Turbo decoder that can decode a code segment with unknown scale information in a manner to provide improved performance.